package main

import (
	"fmt"
	"sort"
)

//1、声明hero结构体
type Hero struct {
	Name string
	Age  int
}

//2、声明一个Hero结构体切片类型
type HeroSlice []Hero

//重写sort参数接口的方法:len()
func (h HeroSlice) Len() int {
	return len(h)
}

//重写sort参数接口的方法:less();
//less：就是具体的排序标准
func (h HeroSlice) Less(i, j int) bool {
	//先按照年龄排序，如果重复，则按照名字长度排序
	if h[i].Age != h[j].Age {
		return h[i].Age > h[j].Age
	} else {
		return len(h[i].Name) > len(h[j].Name)
	}
}

//重写sort参数接口的方法:less();
//less：就是具体的排序标准
func (h HeroSlice) Swap(i, j int) {
	//temp := h[j]
	//h[j] = h[i]
	//h[i] = temp
	//等价于
	h[i], h[j] = h[j], h[i]
}

func main() {
	heroSli := HeroSlice{Hero{"tom", 12}, Hero{"jack", -12}, Hero{"jetty", 23}, Hero{"sfseerr", 12}}
	fmt.Println("排序前", heroSli)
	sort.Sort(heroSli)
	for i, v := range heroSli {
		fmt.Printf("index=%d,value=%v\n", i, v)
	}
}
